<?php
class Articulo extends AppModel {
	var $displayField = 'descripcion';
	var $name = 'Articulo';
	var $belongsTo = array(
		'Estado'=>array('className' => 'Estado','foreignKey' => 'estado_id'),
		'Unidad'=>array('className' => 'Unidad','foreignKey' => 'unidad_id'),
		'Familia'=>array('className' => 'Familia','foreignKey' => 'familia_id'),
		'Afectosigvs'=>array('className' => 'Afectosigvs','foreignKey' => 'afectosigv_id')
	);
	var $validate = array(
		'id'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'menssage'=>'Verifique los datos enviados')),
		'unidad_id'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'menssage'=>'Verifique los datos enviados')),
		'familia_id'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'menssage'=>'Verifique los datos enviados')),
		'estado_id'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'menssage'=>'Verifique los datos enviados')),
		'codigo'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'message'=>'Codigo: El campo no puede quedar vacio'),
						'maxLength'=>array('rule'=>array('maxLegth','5'),'last'=>true,'message'=>'Codigo: Maximo 5 caracteres'),
						'isUnique'=>array('rule'=>'isUnique', 'last'=>true, 'message'=>'Codigo: El valor ya existe'),
						'alphaNumeric'=>array('rule' =>'alphaNumeric','last'=>true,'message'=>'Codigo: No Ingrese espacios en blanco')),
		'descripcion'=>array('notEmpty'=>array('rule'=>'notEmpty','last'=>true,'message'=>'Descripcion: El campo no puede quedar vacio'),
						'isUnique'=>array('rule'=>'isUnique', 'last'=>true, 'message'=>'Descripcion: El valor ya existe'),
						'maxLength'=>array('rule'=>array('maxLegth','60'),'last'=>true,'message'=>'Descripcion: Maximo 60 caracteres')),
		'peso'=>array('numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Peso: El ingreso es solo de numeros')),
		'presentacion'=>array('maxLength'=>array('rule'=>array('maxLegth','60'),'allowEmpty'=>true,'last'=>true,'message'=>'Presentacion: Maximo 60 caracteres')),
		'unidadxcaja'=>array('numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Unidad(es) x caja: El ingreso es solo de numeros')),
		'stockfisico'=>array('numeric'=>array('rule' =>'numeric','allowEmpty'=>true,'last'=>true,'message'=>'Stock Fisico: El ingreso es solo de numeros'))
	);
	function visualizarError($error){if(empty($error)){	return 	array('respuesta'=>true, 'mensaje'=>"El registro a sido actualizado");}	foreach($error as $value){ return array('respuesta'=>false, 'mensaje'=>$value);}}	
	
	function countArticulo($params){return $this->find('count',$params);}
	function dataArticulo($params){return $this->find('all',$params);}
	
	function getArticuloListaJson($art){
		$articuloLista = $this->find('all',array(
								'fields'=>array('Articulo.id','"Articulo"."codigo" || \' - \' || "Articulo"."descripcion" AS "Articulo__label"'
		                                        ,'"Articulo"."codigo" || \' - \' || "Articulo"."descripcion" AS "Articulo__value"', 'Articulo.unidadxcaja'
		                                        ,'"Unidad"."descripcion" AS "Articulo__unidad"'
		                                        ,'Articulo.costo_soles','Articulo.costo_base_soles','Articulo.costo_margen'
		                                        ,'Articulo.costo_dolares','Articulo.costo_base_dolares','costo_descuento'
		                                        ,'"Afectosigvs"."igv" AS "Articulo__igv"'
		                                        ,'Articulo.stockfisico'),
								'conditions'=>array('Articulo.estado_id'=>1, '"Articulo"."codigo" || \' - \'|| "Articulo"."descripcion" ILIKE \'%'.trim($art).'%\''),
								));
								
		$tmp_1 = array('Articulo'=>array(array('id'=>null, 'label'=>'No se encontraron coincidencias', 'value'=>trim($art),'unidadxcaja'=>null,'unidad'=>null)));	
		
		foreach($articuloLista as $key => $articulo){
			$costo_sol = $articulo['Articulo']['costo_soles'] + $articulo['Articulo']['costo_base_soles'];
	    	$costo_sol = $costo_sol + ($costo_sol * $articulo['Articulo']['costo_margen'] / 100);
	    	$costo_sol = $costo_sol - ($costo_sol * $articulo['Articulo']['costo_descuento'] / 100);
	    	
	    	$costo_dol = $articulo['Articulo']['costo_dolares'] + $articulo['Articulo']['costo_base_dolares'];
	    	$costo_dol = $costo_dol + ($costo_dol * $articulo['Articulo']['costo_margen'] / 100);
	    	$costo_dol = $costo_dol - ($costo_dol * $articulo['Articulo']['costo_descuento'] / 100);
	    	
			$tmp['Articulo'][$key]['label'] = $articulo['Articulo']['label'];
			$tmp['Articulo'][$key]['value'] = $articulo['Articulo']['value'];
			$tmp['Articulo'][$key]['costo_soles'] = number_format($costo_sol,2);
			$tmp['Articulo'][$key]['costo_dolares'] = number_format($costo_dol,2);
			$tmp['Articulo'][$key]['igv'] = $articulo['Articulo']['igv'];
			$tmp['Articulo'][$key]['id'] = $articulo['Articulo']['id'];
			$tmp['Articulo'][$key]['unidadxcaja'] = $articulo['Articulo']['unidadxcaja'];
			$tmp['Articulo'][$key]['unidad'] = $articulo['Articulo']['unidad'];
			$tmp['Articulo'][$key]['stockfisico'] = $articulo['Articulo']['stockfisico'];
		}
		return empty($tmp)?json_encode($tmp_1['Articulo']):json_encode($tmp['Articulo']);
	}
	
	function getArticuloListaJson2(){
		$articuloLista = $this->find('all',array('recursive'=>0,
								//'fields'=>array('Articulo.id','"Articulo"."codigo" || \' - \' || "Articulo"."descripcion" AS "Articulo__label"','"Articulo"."codigo" || \' - \' || "Articulo"."descripcion" AS "Articulo__value"', 'Articulo.unidadxcaja', '"Unidad"."codigo" AS "Articulo__unidad"'),
								'fields'=>array('Articulo.id','Articulo.codigo','Articulo.descripcion','Articulo.unidadxcaja','"Unidad"."codigo" AS "Articulo__unidad"'),
								'conditions'=>array('Articulo.estado_id'=>1),
								'order'=>array('Articulo.descripcion'=>'asc')));
		
		$tmp_1 = array('Articulo'=>array(array('id'=>null, 'codigo'=>null, 'descripcion'=>'Seleccionar articulo','unidadxcaja'=>null,'unidad'=>null)));	
		foreach($articuloLista as $key => $articulo){
			$tmp['Articulo'][$key]['id'] = trim($articulo['Articulo']['id']);
			$tmp['Articulo'][$key]['codigo'] = trim($articulo['Articulo']['codigo']);
			$tmp['Articulo'][$key]['descripcion'] = trim($articulo['Articulo']['descripcion']);
			$tmp['Articulo'][$key]['unidadxcaja'] = trim($articulo['Articulo']['unidadxcaja']);
			$tmp['Articulo'][$key]['unidad'] = trim($articulo['Articulo']['unidad']);
		}
		
		return empty($tmp)?json_encode($tmp_1['Articulo']):json_encode($tmp['Articulo']);
	}
	
	/** actualiza el stock fisico del articulo 
	 * return boolean
	 * */
    function setActualizarStock($articulo_id,$cantidad,$operacion='SUMA',$tipoStock='D'){
	    $articulo = $this->find('first',array('conditions'=>array('id'=>$articulo_id),'fields'=>array('id','stockfisico','stock_disponible'),'recursive'=>-1));
	    if(empty($articulo)) return false;
	        
	    switch(strtoupper($tipoStock)){
	        case 'D': //stock disponible
	                if(strtoupper($operacion) == 'SUMA'){ //aumentar el stock
            	        $articulo['Articulo']['stock_disponible'] += $cantidad;
            	    }else{  //disminuir el stock
            	       if($articulo['Articulo']['stock_disponible'] < $cantidad) return false;
            	       else $articulo['Articulo']['stock_disponible'] -= $cantidad;
            	    } break;
	        case 'F': //stock fisico
            	    if(strtoupper($operacion) == 'SUMA'){ //aumentar el stock
            	        $articulo['Articulo']['stockfisico'] += $cantidad;
            	    }else{  //disminuir el stock
            	       if($articulo['Articulo']['stockfisico'] < $cantidad) return false;
            	       else $articulo['Articulo']['stockfisico'] -= $cantidad;
            	    } break;       
	        case 'DF': //stock disponible y fisico
	        case 'FD': //stock disponible y fisico
	                if(strtoupper($operacion) == 'SUMA'){ //aumentar el stock
            	        $articulo['Articulo']['stock_disponible'] += $cantidad;
            	        $articulo['Articulo']['stockfisico'] += $cantidad;
            	    }else{  //disminuir el stock
            	       if(($articulo['Articulo']['stock_disponible'] < $cantidad) || ($articulo['Articulo']['stockfisico'] < $cantidad)){
            	            return false;   
            	       }else{
            	            $articulo['Articulo']['stock_disponible'] -= $cantidad;
            	            $articulo['Articulo']['stockfisico'] -= $cantidad;  
            	       } 
            	    } break;
	    }
	    
	    return $this->save($articulo['Articulo']);
	}
	
	function getListaParaVenta($variables = null){
		$conditions = array('Articulo.estado_id'=>1); //, 'Articulo.codigo'=>'A0001');
		$fields = array('Articulo.codigo','Articulo.descripcion','Articulo.unidadxcaja','"Unidad"."codigo" AS "Articulo__unidad"'
						,'Afectosigvs.igv'
						,'"Articulo"."costo_soles" + "Articulo"."costo_base_soles" 
							+ ("Articulo"."costo_soles" + "Articulo"."costo_base_soles") * "Articulo"."costo_margen" / 100
							- ("Articulo"."costo_soles" + "Articulo"."costo_base_soles") * "Articulo"."costo_descuento" / 100 AS "Articulo__costo_soles"'
						,'"Articulo"."costo_dolares" + "Articulo"."costo_base_dolares" 
							+ ("Articulo"."costo_dolares" + "Articulo"."costo_base_dolares") * "Articulo"."costo_margen" / 100 
							- ("Articulo"."costo_dolares" + "Articulo"."costo_base_dolares") * "Articulo"."costo_descuento" / 100 AS "Articulo__costo_dolares"');
		
        $articulos = $this->find('all',array('conditions'=>$conditions, 'fields'=>$fields, 'order'=>array('Articulo.descripcion'=>'asc')));
        
        if(empty($articulos)) return $articulos;
        
        foreach($articulos as $key => $articulo){
        	$art_tmp[$key]['codigo'] = $articulo['Articulo']['codigo'];
        	$art_tmp[$key]['descripcion'] = $articulo['Articulo']['descripcion'];
        	$art_tmp[$key]['unidadxcaja'] = $articulo['Articulo']['unidadxcaja'];
        	$art_tmp[$key]['unidad'] = $articulo['Articulo']['unidad'];
        	$art_tmp[$key]['costo_soles'] = $articulo['Articulo']['costo_soles'] + $articulo['Articulo']['costo_soles']*$articulo['Afectosigvs']['igv']/100;
        	$art_tmp[$key]['costo_dolares'] = $articulo['Articulo']['costo_dolares'] + $articulo['Articulo']['costo_dolares']*$articulo['Afectosigvs']['igv']/100;
        }
       
        return $art_tmp;
	}
}